package ace.module.security.api;

import ace.module.security.api.model.dto.AccountProfileDto;

/**
 * @author caspar
 * @date 2023/10/26 14:39
 */
public interface AuthenticationApi {
  /**
   * 获取当前账户id
   *
   * @return 当前账户id
   */
  Long getCurrentAccountId();

  /**
   * 获取并检查当前账户id
   *
   * @return 当前账户id
   */
  Long getAndCheckCurrentAccountId();

  /**
   * 获取当前账户基本资料
   *
   * @return 当前账户基本资料
   */
  AccountProfileDto getCurrentAccountProfile();

  /**
   * 获取当前租户id
   *
   * @return 当前租户id
   */
  Long getCurrentTenantId();

  /**
   * 获取当前租户账户id
   *
   * @return 当前租户账户id
   */
  Long getCurrentTenantAccountId();

  /**
   * 获取当前商家id
   *
   * @return 当前商家id
   */
  Long getCurrentMerchantId();

  /**
   * 获取当前商家账户id
   *
   * @return 当前商家账户id
   */
  Long getCurrentMerchantAccountId();

  /**
   * 获取当前商家店铺账户id
   *
   * @return 当前商家店铺账户id
   */
  Long getCurrentMerchantShopAccountId();

  /**
   * 获取当前客户端id
   *
   * @return 当前客户端id
   */
  String getCurrentIdOfClient();

  /**
   * 获取当前账户关联的权限应用id
   *
   * @return 当前账户关联的权限应用id
   */
  Long getCurrentUpmsAppId();

  /**
   * 获取当前账户关联的账户应用id
   *
   * @return 当前账户关联的账户应用id
   */
  Long getCurrentIamAppId();

  /**
   * 是否有超级管理员权限
   *
   * @return true/false
   */
  Boolean hasSuperAdministratorAuthority();
}
